﻿using DataAccess;
using System;
using System.Linq;
using QuanLyKhachSan.Validation;

namespace QuanLyKhachSan
{
    public class ChucVuManager:IValidator<Chucvu>,ILenhThucThi<Chucvu>
    {

        public ValidateResult Validate(Chucvu obj)
        {
            var validate = new ValidateResult();

            if (string.IsNullOrEmpty(obj.MaCV) || obj.MaCV == "")
                validate.Message.Add("Mã chức vụ chưa có");
            if (string.IsNullOrEmpty(obj.TenCV))
                validate.Message.Add("Chưa có tên chức vụ");
            if (obj.Luong <= 0)
                validate.Message.Add("Lương cơ bản nhỏ hơn hoặc bằng 0");
            
            return validate;
        }

        public ActionResult Them(Chucvu obj)
        {
            var action = new ActionResult();

            using (var ql = new QLKhachSanContext())
            {
                var query = from cv in ql.Chucvus
                            where cv.MaCV.Equals(obj.MaCV)
                            select cv;
                try
                {
                    if (!query.Any())
                    {
                        ql.Chucvus.Add(obj);
                        ql.SaveChanges();
                    }
                    else
                        action.Exceptions.Add(new Exception("Đã tồn tại chức vụ có mã "+obj.MaCV));
                }
                catch (Exception e)
                {
                    action.Exceptions.Add(e);
                }
            }

            return action;
        }

        public ActionResult Xoa(string ma)
        {
            var action = new ActionResult();

            using(var ql = new QLKhachSanContext())
            {
                var query = (from cv in ql.Chucvus
                             where cv.MaCV == ma
                             select cv).FirstOrDefault();
                if (query == null)
                    action.Exceptions.Add(new Exception("Không tồn tại chức vụ mã " + ma));
                else
                {
                    query.Trangthai = "Đã xóa";
                    ql.SaveChanges();
                }
            }

            return action;
        }

        public ActionResult Xoa(Chucvu ma)
        {
            var action = new ActionResult();

            using (var ql = new QLKhachSanContext())
            {
                var query = (from cv in ql.Chucvus
                             where cv.MaCV == ma.MaCV
                             select cv).FirstOrDefault();
                if (query == null)
                    action.Exceptions.Add(new Exception("Không tồn tại chức vụ mã " + ma.MaCV));
                else
                {
                    query.Trangthai = "Đã xóa";
                    ql.SaveChanges();
                }
            }

            return action;
        }

        public ActionResult CapNhat(Chucvu obj)
        {
            var action = new ActionResult();

            using (var ql = new QLKhachSanContext())
            {
                var query = (from cv in ql.Chucvus
                                 where cv.MaCV == obj.MaCV
                             select cv).FirstOrDefault();
                if (query == null)
                    action.Exceptions.Add(new Exception("Không tồn tại chức vụ mã " + obj.MaCV));
                else
                {
                    query.Mota = obj.Mota;
                    query.TenCV = obj.TenCV;
                    query.Trangthai = obj.Trangthai;
                    ql.SaveChanges();
                }
            }

            return action;
        }

        public ActionResultAsList<Chucvu> LayDanhSach()
        {
            var action = new ActionResultAsList<Chucvu>();

            using (var ql = new QLKhachSanContext())
            {
                try
                {
                    var query = from cv in ql.Chucvus
                                where cv.Trangthai != "Đã xóa" || cv.Trangthai == null
                                select cv;
                    action.Result = query.ToList();
                    if (action.Result.Count == 0)
                        action.Exceptions.Add(new Exception("Dữ liệu chức vụ trống"));
                }
                catch (Exception e)
                {
                    action.Exceptions.Add(e);
                }
            }

            return action;
        }
    }
}
